/*************************************************************************
    > File Name: cd.c
    > Author: JiaZiChunQiu
    > Created Time: 2024年08月05日 星期一 14时39分47秒
    > Mail: JiaZiChunQiu@163.com
    > Title: 命令 cd
    > Content:
 ************************************************************************/

#include "thread_pool.h"
#include <string.h>

void cdCommand(task_t* task) {
    printf("execute cd command.\n");

    //查表，判断当前目录下是否存在该目录
    //获得当前目录的id, 作为创建目录的parent_id; 
    char sendline[128] = {0};
    int uid;
    int path_id;
    int parent_id = -1;
    mkdir_get_dir_id(task->sp, task->name, &uid, &path_id);
        if(strcmp(task->data, "../") == 0){
            //通过这个函数查找partent_id
            isRoot(task->sp, uid, path_id, &parent_id);

            //判断当前目录是否是顶级目录
            if(parent_id == 0){
                sprintf(sendline, "到达根目录");
                send(task->peerfd, sendline, strlen(sendline), 0);
            }else{
                //回到上一级目录
                re_dir(task->sp, parent_id, uid);
            }

    }else{
        //判断当前目录中是否存在相同目录
        int exist_flag = isExist_virtual_file(task->sp, task->data, path_id, uid, 'd');
        if(exist_flag == 0){
            sprintf(sendline, "cd: %s: 没有那个文件或目录", task->data);
            send(task->peerfd, sendline, strlen(sendline), 0);
        }else{
            //查找task->data 的
            //path_id为打开目录的父目录
            cd_dir(task->sp, path_id, uid, task->data);
        }

    }

    //int ret = chdir(task->data); /* 根据用户提供进行目录切换 */
    //if ( ret < 0 ) { perror("chdir"); return; }

    //char pwd[128] = { 0 };
    //char* pgcwd = getcwd(pwd, sizeof(pwd));
    //if ( pgcwd == NULL ) { perror("getcwd"); return; }
    //printf("current working directory :%s\n", pwd);

    //char content[512] = "cur working directory:";
    //strcat(content, pwd);

    //ret = sendn(task->peerfd, content, strlen(content)); /* 将当前路径发送给用户 */
    //if ( ret < 0 ) { perror("sendn"); return; }
 }
